import type { LocaleType } from '/#/config';

import { set } from 'lodash-es';

export const loadLocalePool: LocaleType[] = [];

/**
 * 设置 HTML 页面语言标记。
 * @param locale 语言标记，如 'en-US'、'zh-CN' 等。
 */
export function setHtmlPageLang(locale: LocaleType) {
  document.querySelector('html')?.setAttribute('lang', locale);
}

/**
 * 设置加载的语言池，并调用回调函数。
 * @param cb 回调函数，它接受一个加载的语言池数组作为参数。
 */
export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) {
  cb(loadLocalePool);
}

/**
 * 根据语言文件生成消息对象。
 * @param langs 语言文件对象，key为文件路径["./zh-CN/antdLocale/DatePicker.ts"],value为文件内容。
 * @param prefix 文件前缀，默认为 'lang'。
 * @returns 生成的消息对象。
 */
export function genMessage(langs: Record<string, Record<string, any>>, prefix = 'lang') {
  const obj: Recordable = {};

  Object.keys(langs).forEach((key) => {
    //取语言文件的内容
    const langFileModule = langs[key].default;
    //去掉"./zh-CN/"和"./en/"
    let fileName = key.replace(`./${prefix}/`, '').replace(/^\.\//, '');
    const lastIndex = fileName.lastIndexOf('.');
    //去掉扩展名.ts
    fileName = fileName.substring(0, lastIndex);
    //把语言文件路径拆分为父目录路径和文件名
    const keyList = fileName.split('/');
    //语言文件所属父目录名或语言文件名
    const moduleName = keyList.shift();
    //语言文件名或{}
    const objKey = keyList.join('.');

    if (moduleName) {
      if (objKey) {
        set(obj, moduleName, obj[moduleName] || {});
        set(obj[moduleName], objKey, langFileModule);
      } else {
        set(obj, moduleName, langFileModule || {});
      }
    }
  });
  return obj;
}
